iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0
自我挑戰組

30天Java由淺入深系列 第 28

Day 28 : 內部類別 - Inner class

  • 分享至 

  • xImage
  •  

介紹

前言

內部類別一般我們也可以統稱為巢狀類別(Nested Classes)。

顧名思義就是在一個類別或介面裡面,還會有一個類別。

其主要目的就是把類別群組在一起,而為什麼我們需要這樣做呢 ?

  1. 提升程式碼的可讀性(readable)和可維護性(maintainable)
  2. 內部類別擁有權限存取外部類別的元素,最佳化程式碼的需求
  • 宣告內部類別的語法 :
class Outer_Class{
	//OuterClass members
	class Inner_Class{
		//InnerClass members
	}
}

種類

內部類別又分為主要四種類型,各個都有不同著眼的功能 :

  • Member inner class (一般內部類別)
    • 在類別中定義另一個類別
  • Anonymous inner class (匿名內部類別)
    • 不透過宣告類別名稱,使用new產生物件
  • Local inner class(區域內部類別)
    • 區域內部的東西只留在函數內使用
  • Static Inner Class(靜態內部類別)
    • 不用建立外部類別物件,可直接宣告內部類別物件

以下針對一般與靜態內部類別去做差異比較。


一般內部類別

宣告一個一般內部類別

class Outer_Class {
  int num = 12;

  class Inner_Class {
    int num2 = 6;
  }
}
  • 當我們在一般內部類別裡面要呼叫內部的成員時,要先在外部建立物件,透過此存取內部
Outer_Class Outer = new Outer_Class();

/*Outer_name.Inner_name Inner_objname = Outer_objname.new Inner_name()*/
Outer_Class.Inner_Class Inner = Outer.new Inner_Class();
public class Main {
  public static void main(String[] args) {
	  Outer_Class Outer = new Outer_Class();
	  Outer_Class.Inner_Class Inner = Outer.new Inner_Class();

      System.out.println(Outer.num * Inner.num2);
  }
}

  • 除了從外部建立物件存取內部成員,我們也可以在內部取用外部的資料
class Outer_Class {
  int num = 12;

  class Inner_Class {
	  public int Inner_Function(){
			return num;
	  }
  }
}

public class Main {
  public static void main(String[] args) {
	  Outer_Class Outer = new Outer_Class();
	  Outer_Class.Inner_Class Inner = Outer.new Inner_Class();

      System.out.println(Inner.Inner_Function());
  }
}

內部類別可以存取外部類別的變數函數 ; 透過外部類別建立物件實體化內部類別


靜態內部類別

靜態內部類別與前面提到的靜態函數一樣,此處不用透過外部類別建立物件存取內部成員

class Outer_Class {
  int num = 12;

  static class Inner_Class {
    int num2 = 6;
  }
}

public class Main {
  public static void main(String[] args) {
	Outer_Class.Inner_Class Inner = new Outer_Class.Inner_Class();

    System.out.println(Inner.num2);
  }
}

以上內容若有誤或任何問題,煩請不吝嗇告知,謝謝您!!!/images/emoticon/emoticon29.gif


上一篇
Day 27 : 多型
下一篇
Day 29 : 基本型態包裹器 - Wrapper Classes
系列文
30天Java由淺入深30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言